package com.cskaoyan.javase.oop2._1extends._10final._3variable._3static;
/**
 * 测试访问类的全局常量,是否会触发类加载
 *
 * 对于基本数据类型全局常量和String的字面值常量赋值的全局常量
 * 访问它们
 * 不会触发这个类的类加载!!
 *
 * 原因:
 *      字面值常量赋值的全局常量,实际上相当于给字面值常量起了一个名字
 *      这个全局常量其实和这个类没有关系,就是一个字面值
 *      所以在类加载时,
 *      会直接从类的常量池中取出该全局常量
 *      避免触发类加载,这样可以提升效率
 *
 *      但是一旦这个全局常量需要创建对象
 *      那么到底创建谁的对象呢?
 *      JVM想要知道这个东西,肯定是需要类加载的
 *
 * @since 11:44
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        System.out.println(A.NUM);
    }
}
class A{
    static final Demo NUM = new Demo();
    static final int NUM2 = 3;
    static final String NUM3 = "abc";
    static {
        System.out.println("A类加载了!");
    }
}